import { ApiProperty } from '@nestjs/swagger';
import { Transform } from 'class-transformer';
import {
  IsString,
  IsOptional,
  IsBoolean,
  IsNumber,
  IsArray,
  Length,
  Min,
  Max,
} from 'class-validator';

export class CreateRoleDto {
  @ApiProperty({
    description: '角色名称',
    example: '系统管理员',
  })
  @IsString()
  @Length(2, 50, { message: '角色名称长度必须在2-50个字符之间' })
  name: string;

  @ApiProperty({
    description: '角色编码',
    example: 'ROLE_ADMIN',
  })
  @IsString()
  @Length(2, 20, { message: '角色编码长度必须在2-20个字符之间' })
  code: string;

  @ApiProperty({
    description: '显示顺序',
    required: false,
    default: 0,
    minimum: 0,
    maximum: 999,
  })
  @IsOptional()
  @IsNumber()
  @Min(0, { message: '排序值不能小于0' })
  @Max(999, { message: '排序值不能大于999' })
  sort?: number;

  @ApiProperty({ description: '状态', required: false, enum: [0, 1] })
  @Transform(({ value }) => {
    // 将数字 1 转为 true，数字 0 转为 false
    if (value === 1 || value === '1') return true;
    if (value === 0 || value === '0') return false;
    return value; // 保留原始值（如果已经是布尔值）
  })
  @IsOptional()
  @IsBoolean()
  status?: boolean;

  @ApiProperty({
    description: '菜单权限ID列表',
  })
  menuIds?: number[];
}
